package com.lzk.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.lzk.constants.SystemConstants;
import com.lzk.domain.ResponseResult;
import com.lzk.domain.dto.AddTagDto;
import com.lzk.domain.dto.GetTagMesDto;
import com.lzk.domain.dto.TagListDto;
import com.lzk.domain.dto.TagMesDto;
import com.lzk.domain.entity.Tag;
import com.lzk.domain.vo.PageVo;
import com.lzk.mapper.TagMapper;
import com.lzk.service.TagService;
import com.lzk.utils.BeanCopyUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.util.List;


@Service("tagService")
public class TagServiceImpl extends ServiceImpl<TagMapper, Tag> implements TagService {

    @Override
    public ResponseResult<PageVo> pageTagList(Integer pageNum, Integer pageSize, TagListDto tagListDto) {
        //分页查询
        LambdaQueryWrapper<Tag> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(StringUtils.hasText(tagListDto.getName()),Tag::getName,tagListDto.getName());
        queryWrapper.eq(StringUtils.hasText(tagListDto.getRemark()),Tag::getRemark,tagListDto.getRemark());

        Page<Tag> page = new Page<>();
        page.setCurrent(pageNum);
        page.setSize(pageSize);
        page(page, queryWrapper);
        //封装数据返回
        PageVo pageVo = new PageVo(page.getRecords(),page.getTotal());

        return ResponseResult.okResult(pageVo);
    }

    @Override
    public ResponseResult addTag(AddTagDto addTagDto) {
        Tag tag = BeanCopyUtils.copyBean(addTagDto, Tag.class);
        save(tag);
        return ResponseResult.okResult();
    }

    @Override
    public ResponseResult getTagMes(long id) {
        Tag tag = this.baseMapper.selectById(id);
        TagMesDto tagMesDto = BeanCopyUtils.copyBean(tag, TagMesDto.class);
        return ResponseResult.okResult(tagMesDto);
    }

    @Override
    public ResponseResult updateTag(TagMesDto tagMesDto) {
        Tag tag = BeanCopyUtils.copyBean(tagMesDto, Tag.class);
        updateById(tag);
        return ResponseResult.okResult();
    }

    @Override
    public ResponseResult listAllTag() {
        LambdaQueryWrapper<Tag> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(Tag::getDelFlag, SystemConstants.STATUS_NORMAL);
        List<Tag> tags = baseMapper.selectList(queryWrapper);
        List<GetTagMesDto> getTagMesDtos = BeanCopyUtils.copyBeanList(tags, GetTagMesDto.class);
        return ResponseResult.okResult(getTagMesDtos);
    }


}
